import vnode from './vnode'
import createElement from './createElement';
import patchVnode from './patchVnode';
function isVnode(vnode) {
    return typeof(vnode.sel) !== 'undefined';
}
function isSameNode(oldVnode, newVnode) {
    return oldVnode.key === newVnode.key && oldVnode.sel === newVnode.sel;
}
export default function patch(oldVnode, newVnode) {
  // 判断 oldVnode 是虚拟节点还是 DOM 节点
  if (!isVnode(oldVnode)) {
      // oldVnode 是 container 节点，tagName 属性是大写
      // 如果是 DOM 节点，就包装成虚拟节点
      oldVnode = vnode(oldVnode.tagName.toLowerCase(), {}, [], undefined, oldVnode); 
      // sel, data, children, text, elm
  }
  // 判断 oldVnode 和 newVnode 是不是同一个节点 (key和 选择器sel 相同)
  if (isSameNode(oldVnode, newVnode)) {
    // console.log('是同一个节点');
    patchVnode(oldVnode, newVnode);
  } else {
    //   console.log("不是同一个节点");
      // 暴力插入新的，删除旧的
      let newVnodeElm = createElement(newVnode);
      // 插入到老节点之前
      if (oldVnode.elm.parentNode && newVnodeElm) {
          oldVnode.elm.parentNode.insertBefore(newVnodeElm, oldVnode.elm);
      }
      // 删除老节点
      oldVnode.elm.parentNode.removeChild(oldVnode.elm);
  }
}
